www.gusucode.com > 基于VBLAST-OFDM的MATLAB SIMULATION,图形化界面,并且给出了各仿真图 > 基于VBLAST-OFDM的MATLAB SIMULATION,图形化界面,并且给出了各仿真图/vblast-ofdm simulation/rx_convert_to_freq.m
function [freq_tr_syms, freq_data_syms] = rx_convert_to_freq(time_signal, SimulationParameters) global SimulationConstants; [n_tx_antennas, n_rx_antennas] = get_n_antennas(SimulationParameters); fft_length=SimulationParameters.FFTPoints; for rx_ant = 1:n_rx_antennas % Long Training symbols if SimulationParameters.TxDiv==0 long_tr_syms = time_signal(rx_ant,1:2*fft_length); long_tr_syms = reshape(long_tr_syms, fft_length, 2); elseif SimulationParameters.TxDiv==2 long_tr_syms = [time_signal(rx_ant,1:fft_length) time_signal(rx_ant,(fft_length+17):(2*fft_length+16))]; long_tr_syms = reshape(long_tr_syms, fft_length, 2); elseif SimulationParameters.TxDiv==4 long_tr_syms = [time_signal(rx_ant,1:fft_length) time_signal(rx_ant,(fft_length+17):(2*fft_length+16)) time_signal(rx_ant,(2*fft_length+33):(2*fft_length+96)) time_signal(rx_ant,(2*fft_length+113):(4*fft_length+48))]; long_tr_syms = reshape(long_tr_syms, fft_length, 4); end %check if there is zero padding if SimulationParameters.ZeroPad~=1 numdatasubc=1; else numdatasubc=SimulationConstants.NumDataSubc; end % to frequency domain freq_long_tr = fft(long_tr_syms)/(fft_length/sqrt(numdatasubc))/sqrt(n_tx_antennas); reorder = [(fft_length/2)+1:fft_length 1:fft_length/2]; freq_long_tr(reorder,:) = freq_long_tr; % Select training carriers freq_tr_syms = freq_long_tr; %if there is a zeropad option if SimulationParameters.ZeroPad==1 num_data_carriers=SimulationConstants.NumDataSubc; x=fft_length-num_data_carriers; freq_tr_syms=freq_tr_syms([x/2:x/2+num_data_carriers/2-1 ((x/2+num_data_carriers/2)+1):fft_length-(fft_length-num_data_carriers)/2],:); end % Take data symbols if ~SimulationParameters.TxDiv data_syms = time_signal(rx_ant,(2*fft_length)+1:length(time_signal)); elseif SimulationParameters.TxDiv==2 data_syms = time_signal(rx_ant, (2*fft_length+16)+1:length(time_signal)); elseif SimulationParameters.TxDiv==4 data_syms = time_signal(rx_ant, (4*fft_length+49):length(time_signal)); end data_sig_len = length(data_syms); n_data_syms = floor(data_sig_len/(fft_length+16)); % Cut to multiple of symbol period data_syms = data_syms(1:n_data_syms*(fft_length+16)); data_syms = reshape(data_syms, (fft_length+16), n_data_syms); % remove guard intervals data_syms(1:16,:) = []; %check if there is zero padding if SimulationParameters.ZeroPad~=1 numdatasubc=1; else numdatasubc=SimulationConstants.NumDataSubc; end % perform fft freq_data = fft(data_syms)/(fft_length/sqrt(numdatasubc))/sqrt(n_tx_antennas); %Reorder pattern is [33:64 1:32] freq_data(reorder,:) = freq_data; %if there is a zeropad option if SimulationParameters.ZeroPad==1 num_data_carriers=SimulationConstants.NumDataSubc; x=fft_length-num_data_carriers; freq_data=freq_data([x/2:x/2+num_data_carriers/2-1 ((x/2+num_data_carriers/2)+1):fft_length-(fft_length-num_data_carriers)/2],:); end tmp_freq_tr(rx_ant,:,:) = freq_tr_syms; tmp_data_syms(rx_ant,:,:) = freq_data; end freq_tr_syms = tmp_freq_tr; freq_data_syms = tmp_data_syms;